// 麻省理工学院许可证
//
// 版权所有 (c) 2021-2023 zuohuaijun，大名科技（天津）有限公司  联系电话/微信：18020030720  QQ：515096995
//
// 特此免费授予获得本软件的任何人以处理本软件的权利，但须遵守以下条件：在所有副本或重要部分的软件中必须包括上述版权声明和本许可声明。
//
// 软件按“原样”提供，不提供任何形式的明示或暗示的保证，包括但不限于对适销性、适用性和非侵权的保证。
// 在任何情况下，作者或版权持有人均不对任何索赔、损害或其他责任负责，无论是因合同、侵权或其他方式引起的，与软件或其使用或其他交易有关。


namespace GnpFine.Core;

/// <summary>
/// 数据库日志写入器
/// </summary>
public class DatabaseLoggingWriter : IDatabaseLoggingWriter, IDisposable
{
    private readonly IServiceScope _serviceScope;
    private readonly SqlSugarRepository<SysLogOp> _sysLogOpRep;   // 操作日志


    public DatabaseLoggingWriter(IServiceScopeFactory scopeFactory)
    {
        _serviceScope = scopeFactory.CreateScope();
      
        _sysLogOpRep = _serviceScope.ServiceProvider.GetRequiredService<SqlSugarRepository<SysLogOp>>();

    }

    public async void Write(LogMessage logMsg, bool flush)
    {
        // var jsonStr = logMsg.Context.Get("loggingMonitor").ToString();
        // var loggingMonitor = JSON.Deserialize<dynamic>(jsonStr);

        // // 不记录数据校验日志
        // //if (loggingMonitor.validation != null) return;
        // 
        // // 获取当前操作者
        // string account = "", realName = "", userId = "", tenantId = "";
        // if (loggingMonitor.authorizationClaims != null)
        // {
        //     foreach (var item in loggingMonitor.authorizationClaims)
        //     {
        //         if (item.type == ClaimConst.Account)
        //             account = item.value;
        //         if (item.type == ClaimConst.RealName)
        //             realName = item.value;
        //         if (item.type == ClaimConst.TenantId)
        //             tenantId = item.value;
        //         if (item.type == ClaimConst.UserId)
        //             userId = item.value;
        //     }
        // }
        // 
        // string remoteIPv4 = loggingMonitor.remoteIPv4;

        // 记录操作日志
        await _sysLogOpRep.InsertAsync(new SysLogOp
        {
            //Id = SnowFlakeSingle.Instance.NextId(),
            ControllerName = "e",
            ActionName = "eew",
            DisplayTitle = "sdfa",
            Status = "dfdsa",
            Elapsed = 243432,
            LogDateTime = logMsg.LogDateTime,
            // Account = account,
            // RealName = realName,
            // HttpMethod = loggingMonitor.httpMethod,
            // RequestUrl = loggingMonitor.requestUrl,
            // RequestParam = (loggingMonitor.parameters == null || loggingMonitor.parameters.Count == 0) ? null : JSON.Serialize(loggingMonitor.parameters[0].value),
            ReturnResult = logMsg.Message == null ? null : JSON.Serialize(logMsg.Message),
            //EventId = logMsg.EventId.Id,
            //ThreadId = logMsg.ThreadId,
            //TraceId = logMsg.TraceId,
            Exception = "ddd",
            Message = logMsg.Message,
            LogLevel = logMsg.LogLevel
        }); ; 
    }

    
    /// <summary>
    /// 释放服务作用域
    /// </summary>
    public void Dispose()
    {
        _serviceScope.Dispose();
    }
}